// C Source File
// Created 11/19/2007; 7:28:23 PM

#include "Civilization.h"
#include "Terrain.h"
#include "Game.h"


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// GetResources ///////////////////////////////////////////////////////////////////////////////////////////////////
// returns the resources of one spot //////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void GetResources(char i, char j, int x, int y, char *r, char emph, char civ, char city)
{		
  char x0 = i-3+x;
  char y0 = j-3+y;
  
  if((x0 < 0 || x0 >= game.mapWidth) ||
     (y0 < 0 || y0 >= game.mapHeight)/* ||
     !GetBit(civilization[civ].fog,x0,y0,mapWidth)*/)
	{
	  r[0] = 0;
	  r[1] = 0;
	  r[2] = 0;
  	return;
	}
  	
  int z = Worldmap(y0,x0)-1;
  	
  char food = terrain[z].food;
  char shields = terrain[z].shields;
  char trade = terrain[z].trade;
  
  if(z == 0)
  {
  	if(GetBit(civilization[civ].city[city].buildings, 29))
  		food++;
  	if(GetBit(civilization[civ].city[city].buildings, 30))
  		shields++;
  }
  
  char b = Bonus(y0,x0);
  if(b != -1)
  {
  	food += tBonus[b].food;
  	shields += tBonus[b].shields;
  	trade += tBonus[b].trade;
  }
  
  if(GetBit(civilization[civ].city[city].buildings, 41) && trade != 0)
  	trade += 1;
  	
  if(GetBit(civilization[civ].city[city].buildings, 47))
  	shields += 1;
  
  if(HasRoad(x0,y0) && terrain[z].irrigate)
  {
  	trade += 1;
  }
  if(HasIrrigation(x0,y0))
  {
  	if(GetBit(civilization[civ].city[city].buildings, 23))
  		food += terrain[z].iBonus * 1.5;
  	else
  		food += terrain[z].iBonus;
  }
  if(HasMine(x0,y0))
  {
  	shields += terrain[z].mBonus;
  }
  if(HasRailroad(x0,y0) && terrain[z].irrigate)
  {
  	if(GetBit(civilization[civ].city[city].buildings, 24))
  		trade += 2;
  	else
  		trade += 1;
  }
  	
  if(emph < 2)
  {
	  r[0] = food;
	  r[1] = shields;
	  r[2] = trade;
  }
  else if(emph == 2)
  {
	  r[0] = shields;
	  r[1] = food;
	  r[2] = trade;
  }
  else
  {
	  r[0] = trade;
	  r[1] = food;
	  r[2] = shields;
  }
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ImproveCityTerrain /////////////////////////////////////////////////////////////////////////////////////////////
// improves the terrain that a city is on /////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ImproveCityTerrain(char civ, char city)
{
	int x = civilization[civ].city[city].x-1;
	int y = civilization[civ].city[city].y-1;
	
	Improv(y,x,0) = 1;
	if(terrain[Worldmap(y,x)-1].irrigate) Improv(y,x,1) = 1;
	if(terrain[Worldmap(y,x)-1].mine) Improv(y,x,2) = 1;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Build.. ////////////////////////////////////////////////////////////////////////////////////////////////////////
// improves the terrain at a certain position /////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void BuildRoad(int x, int y)
{
	Improv(y,x,0) = 1;
}
void BuildIrrigation(int x, int y)
{
	Improv(y,x,1) = 1;
}
void BuildMine(int x, int y)
{
	Improv(y,x,2) = 1;
}
void BuildRailroad(int x, int y)
{
	Improv(y,x,3) = 1;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Has.. //////////////////////////////////////////////////////////////////////////////////////////////////////////
// returns if the position has that improvement ///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool HasRoad(int x, int y)
{
	return Improv(y,x,0);
}
bool HasIrrigation(int x, int y)
{
	return Improv(y,x,1);
}
bool HasMine(int x, int y)
{
	return Improv(y,x,2);
}
bool HasRailroad(int x, int y)
{
	return Improv(y,x,3);
}

